// The module 'vscode' contains the VS Code extensibility API
// Import the module and reference it with the alias vscode in your code below
import * as vscode from 'vscode';
import { Environment } from './envType';
import * as proc from 'child_process';
import {ExecFileException} from 'node:child_process';
import { callbackify } from 'util';

// This method is called when your extension is activated
// Your extension is activated the very first time the command is executed
export function activate(context: vscode.ExtensionContext) {

	// Use the console to output diagnostic information (console.log) and errors (console.error)
	// This line of code will only be executed once when your extension is activated
	console.log('Congratulations, your extension "helloworld" is now active!');
	context.subscriptions.push(
		vscode.commands.registerCommand("file.openTools", async (fileUrl) => {
			let conf = vscode.workspace.getConfiguration('OpenTools');
			// 获取设置参数
			let envValue = conf.get<Environment>("commandRelation");
			let filePath:string = fileUrl.path;
			if (filePath.startsWith("/")) {
				filePath = filePath.substring(1);
			}
			// 获取后缀名
			let fileType:string = "";
			let dot_index = filePath.lastIndexOf(".");
			if (dot_index === -1) {
				console.log("not support file type:", filePath);
				return;
			} else {
				fileType = filePath.substring(dot_index);
			}
			if (envValue === undefined) {
				return;
			}
			let cmd_path:string | undefined = envValue[fileType];
			if (cmd_path === undefined) {
				console.log("not support file type:", filePath);
				return;
			}
			let comStr = cmd_path;

			let child: proc.ChildProcess | undefined;
			let outputChannel:vscode.OutputChannel | undefined;
			if(outputChannel===undefined){outputChannel=vscode.window.createOutputChannel('MyCoder');}
			try {
				proc.spawn(comStr, [filePath], {
					detached: true,  // 开启独立进程
					stdio: 'ignore' // 忽略流绑定
				});
			} catch {
				child = undefined;
			}
		})
	);

	// The command has been defined in the package.json file
	// Now provide the implementation of the command with registerCommand
	// The commandId parameter must match the command field in package.json
	const disposable = vscode.commands.registerCommand('helloworld.helloWorld', () => {
		// The code you place here will be executed every time your command is executed
		// Display a message box to the user
		vscode.window.showInformationMessage('Hello World from helloworld!');
	});

	context.subscriptions.push(disposable);
}

// This method is called when your extension is deactivated
export function deactivate() {}
